package com.atguigu.gateway.handler;
import org.springframework.boot.autoconfigure.web.ErrorProperties;
import org.springframework.boot.autoconfigure.web.ResourceProperties;
import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;
import org.springframework.boot.web.reactive.error.ErrorAttributes;
import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.web.reactive.function.server.*;
import java.util.HashMap; import java.util.Map;
/**
 *自定义异常处理
 *
 *<p>异常时用JSON代替HTML异常信息<p>
 * */
public class JsonExceptionHandler extends DefaultErrorWebExceptionHandler {
    public JsonExceptionHandler(ErrorAttributes errorAttributes, ResourceProperties resourceProperties,   ErrorProperties errorProperties, ApplicationContext applicationContext)
    {         super(errorAttributes, resourceProperties, errorProperties, applicationContext);     }
    /**
     * 获取异常属性
     */
    @Override
    protected Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
        Map<String, Object> map = new HashMap<>();
        map.put("success", false);
        map.put("code", 20005);
        map.put("message", "网关失败");
        map.put("data", null);
        return map;     }
/**
 *指定响应处理方法为JSON处理的方法
 *@param errorAttributes
 */
    @Override
    protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {
        return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);
    }
    /**
     *根据code获取对应的HttpStatus
     * @param errorAttributes
     * @return
     */
//    @Override
//    public HttpStatus getHttpStatus(Map<String, Object> errorAttributes) {
//        return HttpStatus.OK;
//    }
}